<?php

namespace Sisesporte\Entity;

use Doctrine\ORM\Mapping as ORM,
        Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="professor")
 * @ORM\Entity(repositoryClass="Sisesporte\Repository\ProfessorRepository")
 */
class Professor extends UtilsEntity {

    public function __construct($options = null) {
        if(!is_null($options))
            Configurator::configure($this, $options);
        
        $this->admissaoProfessor = new ArrayCollection();
        $this->turmas = new ArrayCollection();
    }
    
    /**
     * @var Sisesporte\Entity\Pessoa $sqPessoa
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Pessoa", inversedBy="sq_pessoa")
     * @ORM\JoinColumn(name="sq_pessoa", referencedColumnName="sq_pessoa")
     */
    protected $sqPessoa;

    /**
     * @var string $noApelido
     * @ORM\Column(name="no_apelido", type="text", nullable=false)
     */
    protected $noApelido;

    /**
     * @var string $coMatricula
     * @ORM\Column(name="co_matricula", type="text", nullable=false)
     */
    protected $coMatricula;

    /**
     * @var string $noCref
     * @ORM\Column(name="no_cref", type="text", nullable=false)
     */
    protected $noCref;
    
    /**
     * @var datetime $dtCadstro
     * @ORM\Column(name="dt_cadastro", type="datetime", nullable=false)
     */
    protected $dtCadastro;
    
    /**
     * @var Sisesporte\Entity\Uf $sqUfCref
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Uf", inversedBy="sq_uf")
     * @ORM\JoinColumn(name="sq_uf_cref", referencedColumnName="sq_uf")
     */
    protected $sqUfCref;
    
    /**
     * @var string $deCategoriaCref
     * @ORM\Column(name="de_categoria_cref", type="text", nullable=true)
     */
    protected $deCategoriaCref;
    
    /**
     * @var string $deAtuacaoCref
     * @ORM\Column(name="de_atuacao_cref", type="text", nullable=true)
     */
    protected $deAtuacaoCref;
    
    /**
     * @var datetime $dtExpedicaoCref
     * @ORM\Column(name="dt_expedicao_cref", type="datetime", nullable=true)
     */
    protected $dtExpedicaoCref;
    
    /**
     * @var datetime $dtAtualizacao
     * @ORM\Column(name="dt_atualizacao", type="datetime", nullable=true)
     */
    protected $dtAtualizacao;
    
    /**
     * @var datetime $dtValidadeCref
     * @ORM\Column(name="dt_validade_cref", type="datetime", nullable=true)
     */
    protected $dtValidadeCref;
    
    /**
     * @var string $deEspecialidade
     * @ORM\Column(name="de_especialidade", type="text", nullable=true)
     */
    protected $deEspecialidade;
    
    /**
     * @var boolean $stAtivo
     * @ORM\Column(name="st_ativo", type="boolean", nullable=false)
     */
    protected $stAtivo;
    
    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\AdmissaoProfessor", mappedBy="$sq_professor")
     */
    protected $admissaoProfessor;
    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Turma", mappedBy="$sq_professor")
     */
    protected $turmas;
    
    public function getAdmissaoProfessor() {
        return $this->admissaoProfessor;
    }

    public function setAdmissaoProfessor($admissaoProfessor) {
        $this->admissaoProfessor = $admissaoProfessor;
    }

    public function getTurmas() {
        return $this->turmas;
    }

    public function setTurmas($turmas) {
        $this->turmas = $turmas;
    }

    public function setSqPessoa(Pessoa $sqPessoa) {
        $this->sqPessoa = $sqPessoa;
        return $this;
    }
    
    public function getSqPessoa() {
        return $this->sqPessoa;
    }

    public function getNoApelido() {
        return $this->noApelido;
    }

    public function setNoApelido($noApelido) {
        $this->noApelido = $noApelido;
        return $this;
    }

    public function getCoMatricula() {
        return $this->coMatricula;
    }

    public function setCoMatricula($coMatricula) {
        $this->coMatricula = $coMatricula;
        return $this;
    }

    public function getNoLotacao() {
        return $this->noLotacao;
    }

    public function setNoLotacao($noLotacao) {
        $this->noLotacao = $noLotacao;
        return $this;
    }

    public function getNoCref() {
        return $this->noCref;
    }

    public function setNoCref($noCref) {
        $this->noCref = $noCref;
        return $this;
    }

    public function getStAtivo() {
        return $this->stAtivo;
    }

    public function setStAtivo($stAtivo) {
        $this->stAtivo = $stAtivo;
        return $this;
    }

    public function getSqUfCref() {
        return $this->sqUfCref;
    }
    
    public function setSqUfCref(Uf $sqUfCref) {
        $this->sqUfCref = $sqUfCref;
        return $this;
    }

    public function getDeCategoriaCref() {
        return $this->deCategoriaCref;
    }

    public function setDeCategoriaCref($deCategoriaCref) {
        $this->deCategoriaCref = $deCategoriaCref;
        return $this;
    }

    public function getDeAtuacaoCref() {
        return $this->deAtuacaoCref;
    }

    public function setDeAtuacaoCref($deAtuacaoCref) {
        $this->deAtuacaoCref = $deAtuacaoCref;
        return $this;
    }

    public function getDtExpedicaoCref() {
        return $this->formataDateTimeToDate($this->dtExpedicaoCref);
    }

    public function setDtExpedicaoCref($dtExpedicaoCref) {
        $this->dtExpedicaoCref = $this->formataDateFromDateTime($dtExpedicaoCref);
        return $this;
    }

    public function getDtValidadeCref() {
        return $this->formataDateTimeToDate($this->dtValidadeCref);
    }

    public function setDtValidadeCref($dtValidadeCref) {
        $this->dtValidadeCref = $this->formataDateFromDateTime($dtValidadeCref);
        return $this;
    }

    public function getDtCadastro() {
        return $this->formataDateTimeToDate($this->dtCadastro);
    }

    public function setDtCadastro($dtCadastro) {
        $this->dtCadastro = $this->formataDateFromDateTime($dtCadastro);
        return $this;
    }

    public function getDtAtualizacao() {
        return $this->formataDateTimeToDate($this->dtAtualizacao);
    }

    public function setDtatualizacao($dtAtualizacao) {
        $this->dtAtualizacao = $this->formataDateFromDateTime($dtAtualizacao);
        return $this;
    }

    public function getDeEspecialidade() {
        return $this->deEspecialidade;
    }

    public function setDeEspecialidade($deEspecialidade) {
        $this->deEspecialidade = $deEspecialidade;
        return $this;
    }

    public function __toString() {
        return $this->noApelido;
    }

    public function toArray() {
        return array(
            'sqPessoa' => $this->getSqPessoa()->getSqPessoa(),
            'noApelido' => $this->getNoApelido(),
            'coMatricula' => $this->getCoMatricula(),
            'noLotacao' => $this->getNoLotacao(),
            'noCref' => $this->getNoCref(),
            'sqUfCref' =>  $this->getSqUfCref(),
            'deCategoriaCref'=>  $this->getDeCategoriaCref(),
            'deAtuacaoCref'=>  $this->getDeAtuacaoCref(),
            'dtExpedicaoCref'=>  $this->getDtExpedicaoCref(),
            'dtValidadeCref'=>  $this->getDtValidadeCref(),
            'dtCadastro' => $this->getDtCadastro(),
            'stAtivo' => $this->getStAtivo()
        );
    }

}
